          SUBROUTINE (OID,GEN,NUM.PGS,STATUS,PSTYLE.OVRD,PRT.ON,DRPT)
** Version# 15.0011[45] - 09/13/2010 - 04:40pm - SMITJR - eclipse
*** V15.0011 Change - Custom Coding . - 09/13/2010 - SMITJR - eclipse
*** V15.0010 Change - Custom Coding CZV696 - 02/17/2010 - JONW - UPGRADE
*** V15.0009 Change - Custom Coding - 01/06/2010 - ROYO - uedit - MST
*** V15.0008 Change - Custom Coding CYY519 - 03/30/2009 - MATTD - eclipse
*** V15.0007 Change - Custom Coding CYY519 - 03/12/2009 - MATTD - eclipse
*** V15.0006 Change - Custom Coding  - 02/06/2009 - ROYO - eclipse
*** V15.0005 Change - Custom Coding  - 11/20/2008 - ROYO - eclipse
** Copied from BP SOE.PRINT.BID Version# 55 - 04/02/2007 - 12:30pm - BILLW - main
*** Subroutine: SOE.PRINT.BID
*-------------------------------------------------------------------------*
*** This subroutine prints/faxes bids/quotations.  Includes page 1 of n
*** logic as well as new OE.DESC.GET and new Lot Billing. This is a laser
*** form with laser printer commands.
*-------------------------------------------------------------------------*
*** Variables:
***       OID         - Order ID                                      [In]
***       GEN         - Order generation                              [In]
***       NUM.PGS     - Number of Pages Printed                      [Out]
***       STATUS      - Print status determines which form will print (In)
***       PSTYLE.OVRD - Print style override                          (In)
***       PRT.ON      - Printer on flag                               (In)
***       DRPT        - Report Defaults                               [In]
*-------------------------------------------------------------------------*
*** Common: LED, LD, CUS, CUSS, PRD, PLNE, DRPT, PHANTOM.PROC, OID.LGTH$
***         JAVA.PROC$
*-------------------------------------------------------------------------*

          SV.GEN = GEN

          DIM PSTYL(10)

          UT.OPEN.FILE "PRINT.STYLES",PSTYLFILE,ERR.MSG
          IF ERR.MSG THEN RETURN

          PG.LGTH = 60
          FT.LGTH = 0
          BOD.LINES = 31

          IF DRPT<29> THEN FAX.FLAG = YES ELSE FAX.FLAG = NO

          FTR.MSG    = "Subtotal"
          FTR.MSG<2> = "S&H CHGS"
          FTR.MSG<3> = "Sales Tax"
          FTR.MSG<4> = "Amt Due"

          IF NOT(PHANTOM.PROC) AND NOT(PRT.ON) AND NOT(JAVA.PROC$) THEN
             WINDOW 15,8,50,5
             IF FAX.FLAG THEN
                PRINT @(0,1):'Faxing .... ':OID
             END ELSE
                PRINT @(0,1):'Printing .... ':OID
             END
          END

          MATREAD LED FROM LEDFILE,OID ELSE GOTO FINISH
*LOT
          IF LED(98)<1,GEN> THEN LOT.FLAG = YES ELSE LOT.FLAG = NO

          OE.GET.QSIGN QSIGN,OID,GEN
          BR = LED(2)<1,GEN,1>
          SHIP.BR = LED(2)<1,GEN,2>

          READV BR.EN FROM TERRFILE,BR,4 ELSE BR.EN = ''
          READ CUS.BR FROM CUSFILE,BR.EN ELSE CUS.BR=''

          IF STATUS#'B' THEN
             READV BR.EN FROM TERRFILE,SHIP.BR,4 ELSE BR.EN = ''
             READ CUS.BR FROM CUSFILE,BR.EN ELSE CUS.BR=''
          END

          BR.ADDR = CUS.BR<1>
          IF CUS.BR<2,1> # '' THEN BR.ADDR<-1> = CUS.BR<2,1>
          IF CUS.BR<2,2> # '' THEN BR.ADDR<-1> = CUS.BR<2,2>
          BR.ADDR<-1> = TRIM(CUS.BR<3>):', ':CUS.BR<4>:' ':CUS.BR<5>

          CONTACTS = RAISE(OCONV(CUS.BR<16>,"MCU"))

          FINDSTR "FAX" IN CONTACTS SETTING PPOS ELSE PPOS = 0
          IF PPOS THEN
             IF CUS.BR<17,PPOS> # '' THEN
                FAX.PHONE = '  Fax ':CUS.BR<17,PPOS>
             END ELSE
                FAX.PHONE = ''
             END
          END ELSE
             FAX.PHONE = ''
          END

          BR.ADDR<-1> = CUS.BR<17,1>:FAX.PHONE

          BT.CN = LED(1)<1,GEN>
          ST.CN = LED(5)<1,GEN>
          GET.CUS BR,BT.CN,ST.CN,QSIGN

          INVN = LED(8)<1,GEN> + 0
          IF INVN=0 THEN
             PRT.LDIDS = LED(49)
             CONVERT VM TO AM IN PRT.LDIDS
          END ELSE
             PRT.LDIDS = LED(48)<1,GEN>
             CONVERT SVM TO AM IN PRT.LDIDS
          END

          IF NOT(PRT.ON) THEN
             PRINTER.ON "BID",RPT.DFLT=DRPT
          END

          GOSUB INIT

          IF ALL.GENS THEN
             PRT.LDIDS = LED(49)
             CONVERT VM TO AM IN PRT.LDIDS
          END

          LDID.CT = DCOUNT(PRT.LDIDS,AM)

          FOR LD.NO = 1 TO LDID.CT
             LDID   = PRT.LDIDS<LD.NO>
             IF ALL.GENS THEN
                NUM.GENS = DCOUNT(LED(12),VM)
                FOR GN = 1 TO NUM.GENS
                   LOCATE LDID IN LED(48)<1,GN> SETTING POS THEN
                      GID = GN
                   END ELSE
                      GOTO SKIPGN
                   END
                   LOCATE GID IN LED(12)<1> SETTING GEN ELSE GEN = 1
                   IF LED(6)<1,GEN> = "X" OR LED(6)<1,GEN> = "I" OR LED(6)<1,GEN> = "Y" OR LED(6)<1,GEN> = "$" THEN
                      GOTO SKIPGN
                   END
SKIPGN:         NEXT GN
             END
             GOSUB PRT.LINE
          NEXT LD.NO

          GEN = SV.GEN
*LOT
          IF LOT.FLAG THEN
             RUNNING.TOTAL = COL.TOTAL<1,COL.CT>
       *     OE.LOT.GET.XCURR ,S.XRATE
       *     RUNNING.TOTAL = OCONV(LD(67)<1,1>/S.XRATE,'MR9')
          END ELSE
             RUNNING.TOTAL = COL.TOTAL<1,COL.CT,1>
          END

          IF NOT(NO.TOLS) THEN
             * Check if the tax should be displayed.
             READV SHIP.VIAS FROM CTRLFILE,'TAX.SHIP.VIAS',1 ELSE SHIP.VIAS = ''
             SHIP.VIAS = RAISE(SHIP.VIAS)
             LOCATE SHIP.VIA IN SHIP.VIAS SETTING POS THEN SHOW.TAX = YES
             IF SHIP.BR="M1" OR SHIP.BR="1" THEN SHOW.TAX= YES
             END ELSE

             GOSUB PRINT.TOTALS
             IF STATUS = 'B' AND NOT(SHOW.TAX) THEN
                BLINE += 1
                TOTAL.COMMENT = 'TAXES NOT INCLUDED'
                PRT.STR = SPACE(TOTAL.SPACES-LEN(TOTAL.COMMENT)-12)
                PRT.STR = PRT.STR:TOTAL.COMMENT
                BOD<BLINE> = PRT.STR
             END
          END

          GOSUB ADD.FTR

          PGS = INT((BLINE + BOD.LINES-1)/BOD.LINES)

          PRINT CHAR(27):"&l1e6D":NORM:
          GOSUB HEADER
          GOSUB PRTBOD

          IF NOT(PRT.ON) THEN
             PRINTER.OFF
          END

          GOTO FINISH
*-------------------------------------------------------------------------*
INIT:     *
          PAGE     = 0
          BO.CT    = 0
          LINE.CT  = 0
          SHOW.TAX = NO

          SLPI       = CHAR(27):"&l6D"
          ELPI       = CHAR(27):"&l8D"
          SMALL      = CHAR(27):'(8U'
          SMALL     := CHAR(27):'(s0p16.67h8.5v0s0b0T'
          MED        = CHAR(27):"(8U":CHAR(27):'(s0p12h0s3b3T'
          SUP.SMALL  = CHAR(27):"(8U":CHAR(27):'(s0p20h0s0b0T'
          NORM       = CHAR(27):'(8U'
          NORM      := CHAR(27):'(s0p10h12v0s0b3T'
          NORM.BOLD  = CHAR(27):'(8U'
          NORM.BOLD := CHAR(27):'(s0p10h12v0s1b3T'
          LARGE      = CHAR(27):'(8U'
          LARGE     := CHAR(27):'(s1p10h14v0s3b3T'
          XLARGE     = CHAR(27):'(8U'
          XLARGE    := CHAR(27):'(s0p8h8v0s3b3T'

     * Prepass for subtotal pricing detail Y/N
          NO.PRICING = NO
          FRST.DET = 1
          LD.CT = DCOUNT(PRT.LDIDS,AM)

          FOR LD.NO = 1 TO LD.CT
             LDID  = PRT.LDIDS<LD.NO>
             LD.GET LDID
             IF LD(1)='S' THEN
                IF LD(21) # '' OR PSTYLE.OVRD="BLIND.SUB" OR PSTYLE.OVRD="BLIND.SUB*" THEN
                   FOR DL = FRST.DET TO LD.NO
                      NO.PRICING<DL> = YES
                   NEXT DL
                END
                FRST.DET = LD.NO + 1
             END
          NEXT LD.NO

          INV.AMT    = LED(15)<1,GEN>
          BOD        = ''
          BLINE      = 0
          PRINT.PICK = NO
          CASH.SALE  = NO
          SSPC       = 21

          BEGIN CASE
          CASE STATUS = 'B'
             DOC.ID   = 'Quotation'
             ORD.ID   = OID
             DOC.TYPE = 'B'
          CASE OTHERWISE
             IF INV.AMT <= 0 THEN
                DOC.ID   = 'Acknowledgement'
             END ELSE
                DOC.ID   = ' Return Goods'
             END
             ORD.ID   = OID
             DOC.TYPE = 'S'
          END CASE

          SOE.CREDIT.CHECK ST.CN,,COD,PRT.MSG,NO.SHIP,,,OID,GEN
          IF COD THEN
             COD.MSG = '** C.O.D. ** C.O.D. ** C.O.D. **'
          END ELSE
             COD.MSG = ''
          END

          IF DRPT<27>='HOLD' THEN
             USE.DOC.TYPE = DOC.TYPE:VM:1
          END ELSE
             USE.DOC.TYPE = DOC.TYPE
          END

          OE.LOG.PRINT OID,GEN,USE.DOC.TYPE,DOC.ID,REPRINT

   * Get Print style record
          BEGIN CASE
          CASE PSTYLE.OVRD#''
             STYLE.ID = PSTYLE.OVRD
          CASE LED(77)<1,GEN>
             STYLE.ID = LED(77)<1,GEN>
          CASE OTHERWISE
             STYLE.ID = 'BID'
          END CASE

          IF STYLE.ID = 'B' OR INDEX(STYLE.ID, 'BLIND', 1) THEN
             STYLE.ID = 'BID'
          END

          GOSUB GET.PSTYLE

          DOC.FORM.SPEC = ''
          IF STATUS = 'B' THEN
             READ DOC.FORM.REC FROM CTRLFILE,'BID.FORM' ELSE DOC.FORM.REC = ''
          END ELSE
             READ DOC.FORM.REC FROM CTRLFILE,'ACK.FORM' ELSE DOC.FORM.REC = ''
          END

          IF DOC.FORM.REC THEN
             GOSUB CNVRT.FORM
          END

          BEGIN CASE
          CASE STATUS = 'B'
             COLUMN.HEADING = 'Quote Qty     Product Description '
          CASE OTHERWISE
             COLUMN.HEADING = " Ordered              Product Description"
          END CASE

    * Compile column heading line from print style record
          TOTAL.SPACES = COL.START
          FMT = 'L#':COL.START
          COLUMN.HEADING = COLUMN.HEADING FMT

          FOR COL = 1 TO COL.CT
             LGTH = FIELD(COL.FRMTS<1,COL>,'#',2)+0
             FRMT = 'L#':LGTH
             IF COL=COL.CT THEN
                TOTAL.FRMT = COL.FRMTS<1,COL>
             END ELSE
                TOTAL.SPACES = TOTAL.SPACES + LGTH
             END
             COLUMN.HEADING = COLUMN.HEADING:COL.HEADS<1,COL> FRMT
          NEXT COL

          TOTAL.FMT = 'L#':TOTAL.SPACES
          NO.TOLS  = NOT(COL.EXTDS<1,COL.CT>)
          NET.TOLS = (COL.BASIS<1,COL.CT>=1 OR COL.BASIS<1,COL.CT>=2)

          GOSUB GET.TOTALS

          PRINT.CREDIT.MSG = NO
          IF PRINT.CREDIT.MSG THEN
             FT.LGTH  += 3
          END

          CUS.PO   = LED(13)<1,GEN>
          REL.NO   = LED(65)<1,GEN>
          FRGHT.ALLW=LED(69)<1,GEN,1>

          IF FRGHT.ALLW THEN
             FRGT = 'Yes'
          END ELSE
             FRGT = 'No'
          END

          SALESMAN = LED(72)<1,GEN>
          READV SALESMAN FROM INIFILE,SALESMAN,3 ELSE NULL

          WRITER = LED(73)<1,GEN>
          READV WRITER FROM INIFILE,WRITER,3 ELSE NULL

          ORD.BY   = LED(68)<1,GEN>
          SHIP.VIA = LED(70)<1,GEN>
          ORD.DATE = LED(4)<1,GEN>
          SHP.DATE = LED(9)<1,GEN>
          REQ.DATE = OCONV(LED(10)<1,GEN> ,'D2/')
          EXP.DATE = LED(31)<1,GEN>
          PHONE.NO = CUS(17)<1,1>
          TERMS.ID = LED(29)<1,GEN>
          READV TERMS.DESC FROM TERMSFILE,TERMS.ID,1 ELSE TERMS.DESC=TERMS.ID
*B2B
          SHIP.ADDR = LED(78)<1,GEN,6>
          IF NOT(SHIP.ADDR) THEN SHIP.ADDR = CUSS(1)
          IF LED(78)<1,GEN,1> # '' THEN SHIP.ADDR<-1> = LED(78)<1,GEN,1>
          IF LED(78)<1,GEN,2> # '' THEN SHIP.ADDR<-1> = LED(78)<1,GEN,2>
          SHIP.ADDR<-1> = TRIM(LED(78)<1,GEN,3>):" ":LED(75)<1,GEN>"L#10"

          *** Find the desired billing address as set up by the customer.
          BEGIN CASE
          *** If the ShipTo is flagged to use the ShipTo for the billing
          *** address...
          CASE CUSS(97)
             BILL.ADDR = SHIP.ADDR<1>
             IF CUSS(2)<1,1> # '' THEN BILL.ADDR<-1> = CUSS(2)<1,1>
             IF CUSS(2)<1,2> # '' THEN BILL.ADDR<-1> = CUSS(2)<1,2>
             BILL.ADDR<-1> = TRIM(CUSS(3)):", ":CUSS(4)"L#4":CUSS(5)"L#14"
          *** If the ShipTo is flagged to use an Alternate ShipTo...
          CASE CUSS(91)<1,1>
             BILL.ADDR = CUSS(91)<1,1>
             IF CUSS(92)<1,1> # '' THEN BILL.ADDR<-1> = CUSS(92)<1,1>
             IF CUSS(92)<1,2> # '' THEN BILL.ADDR<-1> = CUSS(92)<1,2>
             ADDR.STRING  = TRIM(CUSS(93)):", ":CUSS(94) "L#4"
             ADDR.STRING := CUSS(95)"L#14"
             BILL.ADDR<-1> = ADDR.STRING
          *** If the BillTo is flagged to use an Alternate BillTo...
          CASE CUS(91)<1,1>
             BILL.ADDR = CUS(91)<1,1>
             IF CUS(92)<1,1> # '' THEN BILL.ADDR<-1> = CUS(92)<1,1>
             IF CUS(92)<1,2> # '' THEN BILL.ADDR<-1> = CUS(92)<1,2>
             BILL.ADDR<-1> = TRIM(CUS(93)):", ":CUS(94)"L#4":CUS(95)"L#14"
          *** Otherwise, use normal billing address...
          CASE OTHERWISE
             BILL.ADDR = CUS(1)
             IF CUS(2)<1,1> # '' THEN BILL.ADDR<-1> = CUS(2)<1,1>
             IF CUS(2)<1,2> # '' THEN BILL.ADDR<-1> = CUS(2)<1,2>
             BILL.ADDR<-1> = TRIM(CUS(3)):", ":CUS(4)"L#4":CUS(5)"L#14"
          END CASE

          ITEM.TAG.INFO  = '' ;* Item tag info
          OE.ITEM.TAG.READ OID,,,,ITEM.TAG.INFO

          SHP.INST = ''
          BO.FLAG = YES
          SHIP.INST = SHP.INST<1,1,1>
          SHIP.INST = UPCASE(SHIP.INST)

          IF SHIP.INST = "!NOBO" THEN
             BO.FLAG = NO
             SHP.INST = DELETE(SHP.INST,1,1,1)
          END

          IF SHP.INST#'' THEN
             BLINE += 1
             BOD<BLINE> = SPACE(SSPC):'********* Shipping Instructions **********'
             CT = DCOUNT(SHP.INST,SVM)
             FOR JJ=1 TO CT
                BLINE += 1
                BOD<BLINE> = SPACE(SSPC):'* ':SHP.INST<1,1,JJ>"L#38":' *'
             NEXT JJ
             BLINE += 1
             BOD<BLINE> = SPACE(SSPC):STR('*',42)
          END

          WHSE.MSG = 'Shp ':SHIP.BR "L#4": 'Prc ':BR "L#3"

          IF STATUS # 'B' THEN ORD.MSG = 'ORDER' ELSE ORD.MSG = 'QUOTE'

          IF LED(61)<1,GEN> THEN
             TAX.MSG = 'N'
          END ELSE
             TAX.MSG = 'Y'
          END

          PRT.TIME = TIMEDATE()
          BO.PNS   = ''

          RETURN
*-------------------------------------------------------------------------*
GET.PSTYLE: * Get Print style record
          MATREAD PSTYL FROM PSTYLFILE,STYLE.ID ELSE
             MATREAD PSTYL FROM PSTYLFILE,'DEFAULT' ELSE
                MAT PSTYL = ''
                PSTYL(3) = 69
                PSTYL(4) = 'R2#10'
                PSTYL(5) = 1
                PSTYL(6) = 1
                PSTYL(7) = 'Net Price'
             END
          END

          COL.START = PSTYL(3)
          COL.FRMTS = PSTYL(4)
          COL.BASIS = PSTYL(5)
          COL.EXTDS = PSTYL(6)
          COL.HEADS = PSTYL(7)
          ALT.DESC  = PSTYL(8)
          ALL.GENS  = PSTYL(9)
          COL.CT    = DCOUNT(COL.BASIS,VM)
          COL.TOTAL = ''
          SUB.TOTAL = ''
          SUBT.SW   = NO

          RETURN
*-------------------------------------------------------------------------*
CNVRT.FORM: * Convert the values we picked up from our Form overlay
            * Control Record AND from the Print Style Id we're using,
            * that was set up in Print Style Maintenance...

*** Get data out from the Form Overlay Control Record we're using...

          *** We should find this string in the Row where our Invoice's
          *** data columns were set up...
          FINDSTR '@PRINT.STYLE' IN DOC.FORM.REC SETTING AMC THEN
             *** Get the Print Style Width....
             FORM.STYLE.WIDTH = FIELD(DOC.FORM.REC<AMC>,',',2)
             *** Initialize our Total Width to be the Print Style Width...
             TOTAL.WIDTH      = FORM.STYLE.WIDTH

             TAMC = AMC - 1
             *** Go through each data column that's been set up in the
             *** current row...
             LOOP
             UNTIL DOC.FORM.REC<TAMC>[1,1] # '"' DO
             *** Add the width from each column to our Total Width...
             TOTAL.WIDTH += FIELD(DOC.FORM.REC<TAMC>,',',2)
             TAMC -= 1
             REPEAT

             *** Set our Start Column, where we'll be printing the values
             *** determined by our print style Id...
             COL.START    = TOTAL.WIDTH - FORM.STYLE.WIDTH
             DEL DOC.FORM.REC<AMC>

*** Now we'll go through the columns that were set up for the Print
*** Style Id we're using (set up in Print Style Maintenance)...

             STYLE.WIDTH  = 0
             WIDTH.INSERT = ''

             FOR CC = 1 TO COL.CT
             TWIDTH           = FIELD(COL.FRMTS<1,CC>,'#',2)
             WIDTH.INSERT<CC> = TWIDTH
             STYLE.WIDTH     += TWIDTH
             NEXT CC

             BEGIN CASE
             *** If the actual width of our Print Style Id columns is less
             *** than the width that our Form Overlay Control Record
             *** stated that it needed to be...
             CASE STYLE.WIDTH < FORM.STYLE.WIDTH
                CC = COL.CT
                LOOP
                UNTIL STYLE.WIDTH >= FORM.STYLE.WIDTH DO
                *** Increase a columns width...
                WIDTH.INSERT<CC> += 1
                NEW.FRMT  = FIELD(COL.FRMTS<1,CC>,'#',1):'#'
                NEW.FRMT := WIDTH.INSERT<CC>
                COL.FRMTS<1,CC> = NEW.FRMT

                CC -= 1
                *** If we've already increased each columns width
                *** once, start with the first one again...
                IF CC < 1 THEN CC = COL.CT
                STYLE.WIDTH += 1
                REPEAT
             *** If the actual width of our Print Style Id columns is
             *** greater than the width that our Form Overlay Control
             *** Record stated that it needed to be...
             CASE STYLE.WIDTH > FORM.STYLE.WIDTH
                CC = 1
                LOOP
                UNTIL STYLE.WIDTH <= FORM.STYLE.WIDTH DO
                *** Decrease a columns width...
                WIDTH.INSERT<CC> -= 1
                NEW.FRMT  = FIELD(COL.FRMTS<1,CC>,'#',1):'#'
                NEW.FRMT := WIDTH.INSERT<CC>
                COL.FRMTS<1,CC> = NEW.FRMT

                CC += 1
                *** If we've already decreased each columns width
                *** once, start with the first one again...
                IF CC > COL.CT THEN CC = 1
                STYLE.WIDTH -= 1
                REPEAT
             END CASE

             FOR CC = 1 TO COL.CT
                TINSERT  = '"':COL.HEADS<1,CC>:'",'
                TINSERT := WIDTH.INSERT<CC>
                INS TINSERT BEFORE DOC.FORM.REC<AMC+CC-1>
             NEXT CC

             FTR.TEXT.LGTH = 79-WIDTH.INSERT<COL.CT>
             FTR.FMT       = 'R2#':WIDTH.INSERT<COL.CT>
          END

          RETURN
*-------------------------------------------------------------------------*
HEADER:   *
          PAGE = PAGE + 1
          LINE.CT = PG.LGTH

          *** Print the macro
          MACRO.ID = 'BID~':STYLE.ID
          GOSUB SET.MACRO

          *** Print the logo
          PRINT CHAR(27):"*p25y*p50X":
          PTR.MACRO.PRINT ERR.MSG, 'MURRAY', DRPT

          PRINT CHAR(27):"*p0Y":
          PRINT NORM:SLPI:
          PRINT ; PRINT

          IF STATUS = 'B' THEN
             PRINT SPACE(61):XLARGE:DOC.ID:NORM
          END ELSE
             PRINT SPACE(57):XLARGE:DOC.ID:NORM
          END

          PRINT CHAR(27):"*p165Y":SLPI
          PRINT ; PRINT
          PRINT '' "L#57" :OCONV(ORD.DATE,'D2/')   "L#10":
          PRINT ORD.ID                             "L#16"

          PRINT CHAR(27):"*p315Y"
          PRINT '' "L#57":SMALL:"ORDER TO:":NORM:ELPI
          PRINT '' "L#57":SUP.SMALL:BR.ADDR<1> "L#30":NORM
          PRINT '' "L#57":SUP.SMALL:BR.ADDR<2> "L#30":NORM
          PRINT '' "L#57":SUP.SMALL:BR.ADDR<3> "L#30":NORM:PAGE  "R#5"
          PRINT '' "L#57":SUP.SMALL:BR.ADDR<4> "L#30":NORM

          PRINT CHAR(27):"*p565Y":SLPI
          IF STATUS='B' THEN
             PRINT SPACE(9):SMALL:"QUOTE TO:":NORM:
          END ELSE
             PRINT SPACE(9):SMALL:"SOLD TO:":NORM:
          END

          PRINT CHAR(27):"*p565Y":SLPI
          PRINT SPACE(47):SMALL:"SHIP TO:":NORM

          FOR KK=1 TO 4
             PRINT SPACE(9):BILL.ADDR<KK>'L#38':SHIP.ADDR<KK>'L#30'
          NEXT KK

      *------Header Info------*
          PRINT CHAR(27):"*p890Y"
          PRINT ; PRINT

          PRINT '    ':ST.CN          'L#9 ':
          PRINT CUS.PO                'L#22 ':
          PRINT REL.NO                'L#21 ':
          PRINT SALESMAN              'L#20'

          PRINT ; PRINT

          TEXT = WRITER;       WIDTH = 12;       GOSUB CENTER.TEXT
          PRINT ' ':TEXT              'L#12 ':
          TEXT = SHIP.VIA;     WIDTH = 22;       GOSUB CENTER.TEXT
          PRINT TEXT                  'L#22 ':
          TEXT = TERMS.DESC;   WIDTH = 22;       GOSUB CENTER.TEXT
          PRINT TEXT                  'L#22 ':
          PRINT OCONV(SHP.DATE,'D2/') 'L#9 ':
          TEXT = FRGT;         WIDTH = 9;        GOSUB CENTER.TEXT
          PRINT TEXT

          PRINT

          BO.HEADING = NO

          RETURN
*-------------------------------------------------------------------------*
PRTBOD:   *
          PLINE = 1
          LINEX = 0

          LOOP
             LINEX += 1
             IF LINEX > BLINE THEN EXIT
             IF PLINE > BOD.LINES THEN GOSUB TOP; PLINE=1
             PRINT BOD<LINEX>
             PLINE += 1
          REPEAT

          FOR X = PLINE TO BOD.LINES
             PRINT
          NEXT X

          GOSUB FOOTER

          RETURN
*-------------------------------------------------------------------------*
TOP:      *
          PRINT "     *** Continued on Next Page ***"
          GOSUB FFEED
          GOSUB HEADER

          RETURN
*-------------------------------------------------------------------------*
SUBTOTALS: *
          PRT.STR1 = SPACE(COL.START)
          PRT.STR2 = SPACE(COL.START-LEN(SUBT.DESC)):SUBT.DESC

          FOR COL = 1 TO COL.CT
             LGTH = FIELD(COL.FRMTS<1,COL>,'#',2)
             IF COL.EXTDS<1,COL> THEN
                PRT.STR1 = PRT.STR1:STR('-',LGTH)
                IF SUBT.SW THEN
                   PRT.STR2 = PRT.STR2:OCONV(LD(8)<1,GEN>,'MR2')*QSIGN COL.FRMTS<1,COL>
                END
             END ELSE
                IF COL = 2 THEN
                   PRT.STR1 = PRT.STR1:STR('-',LGTH)
                   PRT.STR2 = PRT.STR2:OCONV(LD(8)<1,GEN>,'MR2')*QSIGN COL.FRMTS<1,COL>
                END ELSE
                   PRT.STR1 = PRT.STR1:SPACE(LGTH)
                   PRT.STR2 = PRT.STR2:SPACE(LGTH)

                END
             END
          NEXT COL

          BLINE += 1
          BOD<BLINE> = PRT.STR1
          BLINE += 1
          BOD<BLINE> = PRT.STR2

          RETURN
*-------------------------------------------------------------------------*
GET.TOTALS: *
          SOE.CALC.CASH OID,GEN,AMT.DUE,AMT.PAID,CASH.DISC
          OE.ORDER.TOTAL OID,GEN,QSIGN,,,FREIGHT,HANDLING,TAX.AMT,FET.AMT
          IF STATUS='B' THEN CASH.DISC = 0
          AMT.PAID  = OCONV(AMT.PAID,'MR2')
          FREIGHT   = OCONV(FREIGHT,'MR2')
          HANDLING  = OCONV(HANDLING,'MR2')
          TAX.AMT   = OCONV(TAX.AMT,'MR2')
          CASH.DISC = OCONV(CASH.DISC,'MR2')

  * Find service Charges , put in OE.ORDER.TOTAL when possible
          LOCATE 'SC' IN LED(24)<1,GEN> SETTING POS THEN
             SERV.CHRG = -OCONV(LED(26)<1,GEN,POS>,'MR2')
          END ELSE
             SERV.CHRG = 0
          END

          RETURN
*-------------------------------------------------------------------------*
PRINT.TOTALS: *
          IF SERV.CHRG THEN
             TOTAL.COMMENT = 'Service Charge'
             TOTAL.AMT     = SERV.CHRG
             GOSUB PRINT.TOTAL
             RUNNING.TOTAL += TOTAL.AMT
          END

          PRINT.AMT.DUE = NO

          IF AMT.PAID THEN
             PRINT.AMT.DUE = YES
             IF LED(8)<1,GEN>='' THEN
                TOTAL.COMMENT = 'Less cash paid'
                TOTAL.AMT     = AMT.PAID
                GOSUB PRINT.TOTAL
                RUNNING.TOTAL = RUNNING.TOTAL + TOTAL.AMT
             END ELSE
                AR.ID = OID:'.':LED(8)<1,GEN>"R%3"
                SOE.PAYMENTS.DISC AR.ID,PAY.IDS,PAY.DTS,PAY.AMTS,DISC.TAKEN
                IF DISC.TAKEN THEN
                   TOTAL.COMMENT = 'Less discount taken'
                   TOTAL.AMT     = OCONV(DISC.TAKEN,"MR2")
                   CASH.DISC     = 0
                   GOSUB PRINT.TOTAL
                   RUNNING.TOTAL = RUNNING.TOTAL + TOTAL.AMT
                END
                PCT = DCOUNT(PAY.IDS,VM)
                FOR PYN = 1 TO PCT
                   PAY.ID  = PAY.IDS<1,PYN>
                   PAY.DT  = PAY.DTS<1,PYN>
                   PAY.AMT = PAY.AMTS<1,PYN>
                   IF PAY.DT=DATE() THEN
                      TOTAL.COMMENT = 'Amount paid today # ':PAY.ID
                   END ELSE
                      TOTAL.COMMENT = 'Prior Deposit on ':OCONV(PAY.DT,'D2/')"L#8"
                   END
                   TOTAL.AMT = OCONV(PAY.AMT,"MR2")
                   GOSUB PRINT.TOTAL
                   RUNNING.TOTAL = RUNNING.TOTAL + TOTAL.AMT
                NEXT PYN
             END
          END

          RETURN
*-------------------------------------------------------------------------*
PRINT.TOTAL: *
          PRT.STR = TOTAL.COMMENT"R#56" TOTAL.FMT
          PRT.STR = PRT.STR:TOTAL.AMT TOTAL.FRMT
          BLINE += 1
          BOD<BLINE> = PRT.STR

          RETURN
*-------------------------------------------------------------------------*
PRINT.TOTAL.LINE: *
          LGTH = FIELD(TOTAL.FRMT,"#",2)
          PRT.STR = SPACE(TOTAL.SPACES):STR('-',LGTH)
          BLINE += 1
          BOD<BLINE> = PRT.STR

          RETURN
*-------------------------------------------------------------------------*
PRT.LINE: *
          LD.GET LDID
          PN = LD(1)

          BEGIN CASE
          CASE NUM(PN)
             QS = (SUM(LD(5)<1,GEN>) + SUM(LD(6)<1,GEN>)) * QSIGN
             IF NOT(ALL.GENS) THEN
                IF QS#0 THEN GOSUB PRT.PN
             END ELSE
                GOSUB PRT.PN
             END
          CASE PN='C'
             OE.DESC.GET DESC,ALT.DESC,"SOE Printing"
             GOSUB PRT.XDESC
          CASE PN='S'
             GOSUB PRT.SUBT
          END CASE

          RETURN
*-------------------------------------------------------------------------*
PRT.PN:   *
          TOT.QS = QS
          LINE.CT += 1

          GET.ALL.PRD BR,PN,QSIGN,GROUP

          SHP.TYP.LOCS = LD(7)<1,GEN>
          LOC.CT = DCOUNT(SHP.TYP.LOCS,SVM)
          LN.MSG = LINE.CT
          IF STATUS = 'B' THEN LOC.CT = 1

          FOR LOC = 1 TO LOC.CT
             IF PRD(3) = 9 THEN LOT.FLAG = YES ELSE LOT.FLAG = NO

             KEY = FIELD(PRD(4)," ",2)

             IF NOT(ALL.GENS) THEN
                IF QS=0 THEN GOTO NO.PTR
             END

             OE.DESC.GET DESC,ALT.DESC,"SOE Printing"
             IF LD(36)<1,GEN,1> # '' THEN DESC<1,-1> = LD(36)<1,GEN,1>

             IF LD(31)#'' AND LD(38)<1,2> = '1' THEN
                KCMPS = LD(31)
                KQTYS = LD(30)
                KCMTS = LD(37)
                GET.KIT.COMPS KCMPS,KQTYS,45,DESC
             END

             IF NOT(LED(8)<1,GEN>) THEN
                QOPEN = TOT.QS
                DQS    = ''
             END ELSE
                OE.CALC.QOPEN OID,QSIGN,QOPEN
                IF LED(8)<1,GEN> THEN
                   QOPEN += (SUM(LD(5)<1,GEN>) + SUM(LD(6)<1,GEN>)) * QSIGN
                END
                DQS = QS
             END
   *LOT
             IF LOT.FLAG THEN
                DQS   = 1
                QS    = 1
                QOPEN = 1
             END

             SHP.TYP.LOC = SHP.TYP.LOCS<1,1,LOC>
             LOCA    = FIELD(FIELD(SHP.TYP.LOC,'~',2),'^',1)
             TAG     = FIELD(SHP.TYP.LOC,'^',2)
             TYPE    = FIELD(SHP.TYP.LOC,'~',1)
             IF LOCA = 'WHSE' THEN PRINT.PICK = YES

             IF TYPE = 'T' THEN
                DESC<1,-1> = '<<** ':QS:' Tagged to ':TAG[1,OID.LGTH$]:' **>>'
                LOCA = ''
             END

             BEGIN CASE
             CASE QS<0 AND TYPE='F';  LOCA = '**DEF '
             CASE QS>0 AND TYPE='D';  LOCA = '**DIR '
             CASE QS<0;               LOCA = '**RTN '
             END CASE

             IQ.TO.ALPHA PLNE(3),PRD(7),LD(23),QOPEN,Q1,U1,Q2,U2,QO.ALPHA
             IF LOC > 1 THEN QO.ALPHA = '"'

             PRT.STR = TRIM(QO.ALPHA)      "R#10"

             IF BR = "M1" OR SHIP.BR = "M1" THEN
                PRT.STR := KEY             "R#10 "
             END ELSE
                PRT.STR := PN              "R#10 "
             END

             PRT.STR = PRT.STR:DESC<1,1>   "L#35"

             IF ITEM.TAG.INFO THEN
                * Let user know how many labels go with this line
                OE.ITEM.TAG.GET.FORM.CMT OID,GEN,LDID,LBL.DATA
                LBL.CT = DCOUNT(LBL.DATA,AM)
                FOR LBL.NO = 2 TO LBL.CT
                   DESC<1,-1> = LBL.DATA<LBL.NO>
                NEXT LBL.NO
             END

             SAVE.LINE = PRT.STR
   *LOT
             IF LOT.FLAG THEN
                FORMS.GET.LOT.PRC "BID",LDID,GEN,ALL.GENS,UNT.PRC
                PRT.STR := UNT.PRC"R3#12"
                PRT.STR := UNT.PRC"R2#11"
                COL.TOTAL<1,COL.CT> += UNT.PRC
             END ELSE
                OE.GET.PSTYLE OID,GEN,COL.START,COL.FRMTS,COL.BASIS,COL.EXTDS,COL.CT,QS,PRT.STR,COL.TOTAL,SUB.TOTAL
             END

             IF NO.PRICING<LD.NO> THEN PRT.STR = SAVE.LINE

             BLINE += 1
             BOD<BLINE> = PRT.STR
             DESC = DELETE(DESC,1,1)
             GOSUB PRT.XDESC

NO.PTR:   NEXT LOC
*LOT
          IF LOT.FLAG THEN
             OE.LOT.PRINT.SETUP OID,GEN,'S','B',BLINE,SSPC,BOD,,ALL.GENS,LDID
          END

          RETURN
*-------------------------------------------------------------------------*
PRT.XDESC: *
          DESC.CT = DCOUNT(DESC,VM)
          FOR DLN = 1 TO DESC.CT
             PRT.STR = SPACE(SSPC):DESC<1,DLN>
             IF TRIM(PRT.STR) OR DLN = 1 THEN
                BLINE += 1
                BOD<BLINE> = PRT.STR
             END
          NEXT DLN

          RETURN
*-------------------------------------------------------------------------*
PRT.SUBT: *
          IF NOT(NO.TOLS) THEN
             SUBT.SW = YES
             OE.DESC.GET DESC,ALT.DESC,"SOE Printing"
             SUBT.DESC = DESC<1,1>
             GOSUB SUBTOTALS
             DESC = DELETE(DESC,1,1)
             GOSUB PRT.XDESC
             SUBT.SW = NO
             SUB.TOTAL = ''
          END

          RETURN
*-------------------------------------------------------------------------*
ADD.FTR:  *
          IF FT.LGTH = 0 THEN RETURN

          PGS = INT((BLINE+BOD.LINES-1)/BOD.LINES)
          LAST.PG = PGS*BOD.LINES - BLINE

          IF LAST.PG >= FT.LGTH THEN
             ADD.LINES = LAST.PG - FT.LGTH
          END ELSE
             ADD.LINES = BOD.LINES + LAST.PG - FT.LGTH
          END

          FOR X = 1 TO ADD.LINES
             BLINE += 1
             BOD<BLINE> = ''
          NEXT X

          IF PRINT.CREDIT.MSG THEN
             BLINE += 1
             BOD<BLINE> = STR('+ ',35)
             BLINE += 1
             BOD<BLINE> = '+   Thank You For Your Business __________'
             BLINE += 1
             BOD<BLINE> = STR('+ ',35)
          END

          RETURN
*-------------------------------------------------------------------------*
FFEED:    *
          PRINT CHAR(12):

          RETURN
*-------------------------------------------------------------------------*
FOOTER:   *
          PRINT CHAR(27):"*p2790Y":NORM
          PRINT NORM.BOLD:

          TFTR = SPACE(79)
          TFTR[79-WIDTH.INSERT<COL.CT>-LEN(FTR.MSG<1>)+1,LEN(FTR.MSG<1>)] = FTR.MSG<1>
          TFTR[79-WIDTH.INSERT<COL.CT>+1,WIDTH.INSERT<COL.CT>] = RUNNING.TOTAL FTR.FMT
          PRINT TFTR

          TFTR[79-WIDTH.INSERT<COL.CT>-LEN(FTR.MSG<2>)+1,LEN(FTR.MSG<2>)] = FTR.MSG<2>
          TFTR[79-WIDTH.INSERT<COL.CT>+1,WIDTH.INSERT<COL.CT>] = (FREIGHT + HANDLING) FTR.FMT
          PRINT TFTR

          RUNNING.TOTAL += FREIGHT + HANDLING

          IF STATUS = 'B' AND NOT(SHOW.TAX) THEN
             PRINT
          END ELSE
             RUNNING.TOTAL += (FREIGHT + HANDLING)
             TFTR[79-WIDTH.INSERT<COL.CT>-LEN(FTR.MSG<3>)+1,LEN(FTR.MSG<3>)] = FTR.MSG<3>
             TFTR[79-WIDTH.INSERT<COL.CT>+1,WIDTH.INSERT<COL.CT>] = TAX.AMT FTR.FMT
             PRINT TFTR
             RUNNING.TOTAL += TAX.AMT
          END

          PRINT
          TFTR = SPACE(79)
          TFTR[79-WIDTH.INSERT<COL.CT>-LEN(FTR.MSG<4>)+1,LEN(FTR.MSG<4>)] = FTR.MSG<4>
          TFTR[79-WIDTH.INSERT<COL.CT>+1,WIDTH.INSERT<COL.CT>] = RUNNING.TOTAL FTR.FMT
          PRINT TFTR

          PRINT CHAR(27):"*p2840Y":NORM
          IF STATUS = 'B' THEN
             PRINT  NORM.BOLD:'This is a Quotation.':NORM
             PRINT CHAR(27):"*p2920Y"
             PRINT  ELPI:SUP.SMALL:'Price are firm for 30 days, subject to change without notice after 30 days.'
             PRINT  'Applicable taxes extra.':NORM
          END
          PRINT SLPI:
          PRINT CHAR(12):

          RETURN
*-------------------------------------------------------------------------*
CENTER.TEXT:    *** Center text in a field of the specified width.
          LMARGIN = INT((WIDTH - LEN(TEXT)) / 2)
          RMARGIN = WIDTH - LMARGIN - LEN(TEXT)
          TEXT = SPACE(LMARGIN):TEXT:SPACE(RMARGIN)

          RETURN
*-------------------------------------------------------------------------*
DRAWSHADING: *** Draw shaded boxes to fill in headers

          PERC = 11   ;* Shade at 11%
          REST = 100  ;* Restore to 100%
          HGHT = 1    ;* All boxes are 1 char height

          FORMS.PRINT.SHADE PERC,1680, 190,2.3,HGHT,REST  ;* Inv Dt/Number
          FORMS.PRINT.SHADE PERC,2160, 340,0.7,HGHT,REST  ;* Page Number
          FORMS.PRINT.SHADE PERC,   0, 910,7.9,HGHT,REST  ;* 1st full line
          FORMS.PRINT.SHADE PERC,   0,1060,7.9,HGHT,REST  ;* 2nd full line
          FORMS.PRINT.SHADE PERC,   0,1210,7.9,HGHT,REST  ;* 3rd full line

          RETURN
*-------------------------------------------------------------------------*
SET.MACRO: *** Print macro or create if necessary

          MACRO.OK = ''

          *** Check to see if this macro is already loaded
          PTR.MACRO.ACTIVE MACRO.ID,PRT.SEQ

          *** If a sequence is returned, use to print macro immediately
          IF PRT.SEQ THEN GOTO PRT.MACRO

          *** Begin saving macro (suspend physical printing)
          PTR.MACRO.SAVE.ON MACRO.ID,MACRO.OK

          *** 'Print' the overlay - this does NOT physically print,
          *** anything between SAVE statements is only saved to macro
          DOC.FORM.CONVERT DOC.FORM.REC,DOC.FORM.SPEC
          DOC.FORM.PRINT DOC.FORM.SPEC,"1"
          GOSUB DRAWSHADING

          *** Stop saving macro (resume physical printing)
          PTR.MACRO.SAVE.OFF MACRO.ID,MACRO.OK,PRT.SEQ

PRT.MACRO: *** Print the macro with saved or newly created sequence

          IF PRT.SEQ THEN
             *** For each !, print CHAR(27) and the following characters
             CONVERT '!' TO AM IN PRT.SEQ
             ESC.CT = DCOUNT(PRT.SEQ,AM)
             FOR XX = 2 TO ESC.CT
                PRINT CHAR(27):PRT.SEQ<XX>:
             NEXT XX
             PRINT
          END

          RETURN
*-------------------------------------------------------------------------*
FINISH:   *
          IF NOT(PHANTOM.PROC) AND NOT(PRT.ON) AND NOT(JAVA.PROC$) THEN
             WINDOW.CLOSE
          END

          RETURN
*-------------------------------------------------------------------------*
!SMITJR~09/13/10~16:40
